function x_next = ackermann_dynamics(x, u, dt, params)
%ACKERMANN_DYNAMICS Ackermann车辆运动学模型
%
% 输入:
%   x - 当前状态 [x; y; theta; v] (4x1)
%   u - 控制输入 [a; delta] (2x1) - 加速度和前轮转角
%   dt - 时间步长
%   params - 参数结构体
%
% 输出:
%   x_next - 下一时刻状态 (4x1)

    % 提取状态
    x_pos = x(1);
    y_pos = x(2);
    theta = x(3);
    v = x(4);
    
    % 提取控制
    a = u(1);
    delta = u(2);
    
    % 限制控制输入
    a = max(params.a_min, min(params.a_max, a));
    delta = max(params.delta_min, min(params.delta_max, delta));
    
    % 运动学方程 (使用欧拉前向积分)
    x_dot = v * cos(theta);
    y_dot = v * sin(theta);
    theta_dot = v * tan(delta) / params.L;
    v_dot = a;
    
    % 更新状态
    x_next = zeros(4, 1);
    x_next(1) = x_pos + x_dot * dt;
    x_next(2) = y_pos + y_dot * dt;
    x_next(3) = theta + theta_dot * dt;
    x_next(4) = v + v_dot * dt;
    
    % 限制速度
    x_next(4) = max(params.v_min, min(params.v_max, x_next(4)));
    
    % 标准化航向角到 [-pi, pi]
    x_next(3) = atan2(sin(x_next(3)), cos(x_next(3)));
end